// Copyright Epic Games, Inc. All Rights Reserved.

#pragma once

#include "CommonActivatableWidget.h"

#include "LyraActivatableWidget.generated.h"

struct FUIInputConfig;

UENUM(BlueprintType)
enum class ELyraWidgetInputMode : uint8
{
	Default, // 默认输入模式
	GameAndMenu, // 游戏和菜单输入模式
	Game, // 仅游戏输入模式
	Menu // 仅菜单输入模式
};

// 一个可激活的控件，当激活时自动驱动所需的输入配置
UCLASS(Abstract, Blueprintable)
class ULyraActivatableWidget : public UCommonActivatableWidget
{
	GENERATED_BODY()

public:
	ULyraActivatableWidget(const FObjectInitializer& ObjectInitializer);
	
public:
	
	//~UCommonActivatableWidget 接口
	/**
	 * 获取此控件激活时所需的输入配置
	 * @return 可选的输入配置，如果不指定则返回空
	 */
	virtual TOptional<FUIInputConfig> GetDesiredInputConfig() const override;
	//~UCommonActivatableWidget 接口结束

#if WITH_EDITOR
	/**
	 * 验证编译的控件树，用于在编译时检查潜在问题
	 * @param BlueprintWidgetTree 蓝图控件树
	 * @param CompileLog 编译日志接口
	 */
	virtual void ValidateCompiledWidgetTree(const UWidgetTree& BlueprintWidgetTree, class IWidgetCompilerLog& CompileLog) const override;
#endif
	
protected:
	/** 当此UI激活时所需的输入模式，例如是否希望按键事件仍然到达游戏/玩家控制器？ */
	UPROPERTY(EditDefaultsOnly, Category = Input) // 输入配置，默认为 Default
	ELyraWidgetInputMode InputConfig = ELyraWidgetInputMode::Default;

	/** 当游戏获得输入时所需的鼠标行为 */
	UPROPERTY(EditDefaultsOnly, Category = Input) // 游戏鼠标捕获模式，默认为永久捕获
	EMouseCaptureMode GameMouseCaptureMode = EMouseCaptureMode::CapturePermanently;
};